home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / assembly / psudoplazma.lha / plasma.S < prev    next >
Encoding:
Text File  |  1990-09-13  |  10.5 KB  |  454 lines

  1.     section lame,code_c
  2.  
  3. >EXTERN"df0:PLANE",$60000
  4.  
  5. ;PLANE 320x256x4
  6.  
  7.  
  8. Trap_vec0  = $80
  9. Execbase   = $4
  10. Oldopen    = -$198
  11. Intenar    = $01c
  12. Intena     = $09a
  13. Dmaconr    = $002
  14. Dmacon     = $096
  15. Cop1lch    = $080
  16. Copjmp1    = $088
  17. Vposr      = $004
  18.  
  19.     Move.l    #Start,$80.w    ; Trap vector 0
  20.     Trap    #0        ; Execute trap 0 to give full control of the
  21.     Rts            ; 68000, needs an RTE to return.
  22.  
  23. Start:
  24.     bsr    KillSys
  25.     bsr    colint
  26.     bsr    main
  27.     bsr    setupsys
  28.  
  29.     Rte        ; Return from exception 
  30.         
  31.  
  32. *****************************************************************************
  33. ;Killsys - Disable operating system and interrupts
  34. *****************************************************************************
  35. Killsys:
  36.     Move.l    $4.w,a6        ; Execbase vector
  37.     Lea    Gfxname(pc),a1    ; Pointer to "graphics.library" into a1
  38.     Jsr    Oldopen(a6)    ; Open this library
  39.     Lea    $dff000,a6    ; Pointer to custom chips
  40.     Move.l    d0,a0        ; Address of the graphics library
  41.     Move.l    38(a0),Sys_copl        ; Remember the System copperlist
  42.     Move    Intenar(a6),Int_set    ; System interrupts
  43.     Move    #$7fff,Intena(a6)    ; Now switch off all interrupts
  44.     Move.l    $6c.w,Vbl_vec        ; System vertical blanking int.
  45.     Move    Dmaconr(a6),Dma_set    ; System DMA
  46.     Move    #$7fff,Dmacon(a6)    ; Clear all DMA
  47.     Move    #$87c0,Dmacon(a6)    ; Now set the required DMA channels
  48.  
  49.     Move.l    #COP,Cop1lch(a6)    ; Init. our own copperlist
  50.     Clr    Copjmp1(a6)
  51.  
  52.     Rts
  53.  
  54. Gfxname:        dc.b "graphics.library",0
  55.     Even
  56. *****************************************************************************
  57. ;Sysreturn - Re-enable operating system and interrupts
  58. *****************************************************************************
  59. Setupsys:
  60.     Lea    $dff000,a6
  61.     Move    #$7fff,Intena(a6)    ; Clear all interrupts
  62.     Move.l    Vbl_vec,$6c.w    ; Restore VBL interrupt
  63.     Move    Int_set,d0
  64.     Or    #$c000,d0
  65.     Move    d0,Intena(a6)        ; Restore system interrupts
  66.     Move    #$7fff,Dmacon(a6)
  67.     Move    Dma_set,d0
  68.     Or    #$8200,d0
  69.     Move    d0,Dmacon(a6)        ; Restore system DMA
  70.     Move.l    Sys_copl,Cop1lch(a6)    ; Restore system copperlist
  71.     Clr    Copjmp1(a6)
  72.     Rts
  73.  
  74. Vbl_vec:              dc.l 0
  75. Int_set:              dc.l 0
  76. Dma_set:              dc.l 0
  77. Sys_copl:              dc.l 0
  78.  
  79.  
  80. Main:
  81.     Move.l    Vposr(a6),d0
  82.     And.l    #$1ff00,d0
  83.     Cmp.l    #$00100,d0    ; Wait for vertical position 1
  84.     Bne.s    Main
  85.  
  86.     BSR    M316
  87.     BSR    M588
  88.     BSR    FF
  89.  
  90.     ; ROUTINE ;
  91.  
  92.     Btst    #6,$bfe001    ; Check the left mouse button
  93.     Bne.s    Main
  94.  
  95.     Rts
  96.  
  97. COPP:        dc.L    PLASMACOP
  98. COP2:        dc.L    PLASMACOP2
  99.  
  100. M316:    MOVE.L    COP2,D0
  101.     MOVE.L    COPP,COP2
  102.     MOVE.L    D0,COPP
  103.     SUB.L    #PLASMACOP-COP,D0
  104.     MOVE.L    D0,$DFF080
  105.     
  106.     MOVE.L    #$00420042,$60(A6)
  107.     MOVE.L    #$FFFFFFFF,$44(A6)
  108.     MOVE.L    #$00000042,$64(A6)
  109.     MOVE.W    #$2D01,D6
  110.     MOVE.L    COPP(PC),A0    
  111.     ADD.L    #10,A0
  112.     MOVE.L    INV+4(PC),A1    
  113.     MOVE.L    INV+72(PC),A2    
  114.     MOVE.L    DEV+4(PC),A3    
  115.     BSR    BLIT
  116.     ADDQ.L    #4,A0
  117.     MOVE.L    INV+8(PC),A1
  118.     MOVE.L    INV+76(PC),A2
  119.     MOVE.L    DEV+8(PC),A3
  120.     BSR    BLIT
  121.     ADDQ.L    #4,A0
  122.     MOVE.L    INV+12(PC),A1
  123.     MOVE.L    INV+80(PC),A2
  124.     MOVE.L    DEV+12(PC),A3
  125.     BSR    BLIT
  126.     ADDQ.L    #4,A0
  127.     MOVE.L    INV+16(PC),A1
  128.     MOVE.L    INV+84(PC),A2
  129.     MOVE.L    DEV+16(PC),A3
  130.     BSR    BLIT
  131.     ADDQ.L    #4,A0
  132.     MOVE.L    INV+20(PC),A1
  133.     MOVE.L    INV+88(PC),A2
  134.     MOVE.L    DEV+20(PC),A3
  135.     BSR    BLIT
  136.     ADDQ.L    #4,A0
  137.     MOVE.L    INV+24(PC),A1
  138.     MOVE.L    INV+92(PC),A2
  139.     MOVE.L    DEV+24(PC),A3
  140.     BSR    BLIT
  141.     ADDQ.L    #4,A0
  142.     MOVE.L    INV+28(PC),A1
  143.     MOVE.L    INV+96(PC),A2
  144.     MOVE.L    DEV+28(PC),A3
  145.     BSR    BLIT
  146.     ADDQ.L    #4,A0
  147.     MOVE.L    INV+32(PC),A1
  148.     MOVE.L    INV+100(PC),A2
  149.     MOVE.L    DEV+32(PC),A3
  150.     BSR    BLIT
  151.     ADDQ.L    #4,A0
  152.     MOVE.L    INV+36(PC),A1
  153.     MOVE.L    INV+104(PC),A2
  154.     MOVE.L    DEV+36(PC),A3
  155.     BSR    BLIT
  156.     ADDQ.L    #4,A0
  157.     MOVE.L    INV+40(PC),A1
  158.     MOVE.L    INV+108(PC),A2
  159.     MOVE.L    DEV+40(PC),A3
  160.     BSR    BLIT
  161.     ADDQ.L    #4,A0
  162.     MOVE.L    INV+44(PC),A1
  163.     MOVE.L    INV+112(PC),A2
  164.     MOVE.L    DEV+44(PC),A3
  165.     BSR    BLIT
  166.     ADDQ.L    #4,A0
  167.     MOVE.L    INV+48(PC),A1
  168.     MOVE.L    INV+116(PC),A2
  169.     MOVE.L    DEV+48(PC),A3
  170.     BSR    BLIT
  171.     ADDQ.L    #4,A0
  172.     MOVE.L    INV+52(PC),A1
  173.     MOVE.L    INV+120(PC),A2
  174.     MOVE.L    INV+52(PC),A3
  175.     BSR    BLIT
  176.     ADDQ.L    #4,A0
  177.     MOVE.L    INV+56(PC),A1
  178.     MOVE.L    INV+124(PC),A2
  179.     MOVE.L    DEV+56(PC),A3
  180.     BSR    BLIT
  181.     MOVE.L    COPP(PC),A0
  182.     ADDQ.L    #6,A0
  183.     MOVE.L    INV(PC),A1
  184.     MOVE.L    INV+68(PC),A2
  185.     MOVE.L    DEV(PC),A3
  186.     BSR    BLIT
  187.     MOVEQ    #0,D0
  188.     RTS    
  189.  
  190. BLIT:    BTST    #14,$00DFF002        ;ok
  191.     BNE    BLIT
  192.     MOVE.L    A1,$50(A6)
  193.     MOVE.L    A0,$54(A6)
  194.     MOVE.L    #$09F00000,$40(A6)
  195.     MOVE.W    D6,$58(A6)
  196. BLIT2:    BTST    #14,$00DFF002
  197.     BNE    BLIT2
  198.     MOVE.L    A0,$48(A6)
  199.     MOVE.L    A2,$50(A6)
  200.     MOVE.L    A0,$54(A6)
  201.     MOVE.L    #$0B5A0000,$40(A6)
  202.     MOVE.W    D6,$58(A6)
  203. BLIT3:    BTST    #14,$00DFF002
  204.     BNE    BLIT3
  205.     MOVE.L    A0,$48(A6)
  206.     MOVE.L    A3,$50(A6)
  207.     MOVE.L    A0,$54(A6)
  208.     MOVE.L    #$0B5A0000,$40(A6)
  209.     MOVE.W    D6,$58(A6)
  210.     RTS    
  211.  
  212. M588:    MOVE.B    SPEED1(PC),D0
  213.     MOVE.L    SINPOINTER1(PC),D1
  214.     ADD.L    D0,D1
  215.     AND.L    #$FF,D1
  216.     MOVE.L    D1,SINPOINTER1
  217.     LEA    SINUS+$200(PC),A0
  218.     ADD.L    D1,A0
  219.     MOVEQ    #0,D0
  220.     MOVEQ    #0,D1
  221.     MOVE.L    #COLL1,D2
  222.     LEA    INV(PC),A1
  223.     MOVE.W    #14,D7
  224. lb386:    MOVE.L    D2,(A1)
  225.     MOVE.B    (A0),D0
  226.     ADD.W    D0,D0
  227.     ADD.L    D0,(A1)+
  228.     ADD.L    #$10,A0        ;SCHRITTWEITE *2
  229.     DBRA    D7,lb386
  230.     MOVE.B    SPEED2(PC),D0
  231.     MOVE.L    SINPOINTER2(PC),D1
  232.     ADD.L    D0,D1
  233.     AND.L    #$FF,D1
  234.     MOVE.L    D1,SINPOINTER2
  235.     LEA    SINUS+$200(PC),A0
  236.     ADD.L    D1,A0
  237.     MOVEQ    #0,D0
  238.     MOVEQ    #0,D1
  239.     MOVE.L    #COLL2,D2
  240.     LEA    INV+68(PC),A1
  241.     MOVE.W    #14,D7
  242. lb3E8:    MOVE.L    D2,(A1)
  243.     MOVE.B    (A0),D0
  244.     ADD.W    D0,D0
  245.     ADD.L    D0,(A1)+
  246.     ADD.L    #$0E,A0        ;SCHRITTWEITE *2
  247.     DBRA    D7,lb3E8
  248.     MOVE.B    SPEED3(PC),D0
  249.     MOVE.L    SINPOINTER3(PC),D1
  250.     ADD.L    D0,D1
  251.     AND.L    #$FF,D1
  252.     MOVE.L    D1,SINPOINTER3
  253.     LEA    SINUS+$200(PC),A0
  254.     ADD.L    D1,A0
  255.     MOVEQ    #0,D0
  256.     MOVEQ    #0,D1
  257.     MOVE.L    #COLL3,D2
  258.     LEA    DEV(PC),A1
  259.     MOVE.W    #14,D7
  260. lb44A:    MOVE.L    D2,(A1)
  261.     MOVE.B    (A0),D0
  262.     ADD.W    D0,D0
  263.     ADD.L    D0,(A1)+
  264.     ADD.L    #$0E,A0        ;SCHRITTEWEITE *2
  265.     DBRA    D7,lb44A
  266.     RTS    
  267.  
  268.  
  269.  
  270. COLINT:    LEA    COLL1(PC),A1
  271.     LEA    COLL2(PC),A2
  272.     LEA    COLL3(PC),A3
  273.     LEA    COLTAB(PC),A0
  274.     MOVEQ    #$1D,D6
  275. WUF2:    MOVEQ    #$0B,D5
  276. WUF1:    MOVE.W    (A0),D0
  277.     MOVE.W    D0,(A3)+
  278.     ROR.L    #4,D0
  279.     MOVE.W    D0,(A2)+
  280.     ROR.L    #4,D0
  281.     MOVE.W    D0,(A1)+
  282.     DBF    D5,WUF1
  283.     ADD.W    #2,A0
  284.     DBF    D6,WUF2
  285.  
  286.     LEA    PLASMACOP(PC),A0
  287.     LEA    PLASMACOP2(PC),A2
  288.     MOVE.W    #$B3,D7
  289. IN1:    LEA    COPYCOP(PC),A1
  290.     MOVE.W    #$10,D6
  291. IN2:    MOVE.L    (A1),(A0)+
  292.     MOVE.L    (A1)+,(A2)+
  293.     DBF    D6,IN2
  294.     ADD.W    #$0100,COPYCOP
  295.     DBF    D7,IN1
  296.  
  297.     RTS
  298.  
  299.  
  300.  
  301. SPEED1:        dc.B    2
  302. SPEED2:        dc.B    1
  303. SPEED3:        dc.B    2
  304.     EVEN
  305.  
  306. SINPOINTER1:        dc.L    0
  307. SINPOINTER2:        dc.L    0
  308. SINPOINTER3:        dc.L    0
  309.  
  310. COLTAB:        dc.W    $0100,$0200,$0300,$0400,$0500,$0600,$0700,$0800
  311.         dc.W    $0900,$0A00,$0B00,$0C00,$0D00,$0E00,$0F00,$0E00
  312.         dc.W    $0D00,$0C00,$0B00,$0A00,$0900,$0800,$0700,$0600
  313.         dc.W    $0500,$0400,$0300,$0200,$0100,$0000
  314.  
  315. COPYCOP:
  316.         dc.W    $4707,$FFFE
  317.         dc.W    $0182,$0000,$0184,$0000,$0186,$0000,$0188,$0000
  318.         dc.W    $018A,$0000,$018C,$0000,$018E,$0000,$0190,$0000
  319.         dc.W    $0192,$0000,$0194,$0000,$0196,$0000,$0198,$0000
  320.         dc.W    $019A,$0000,$019C,$0000,$019E,$0000
  321.         dc.W    $0102,$0000
  322.  
  323. COLL1:    BLK.W    $180,0
  324. COLL2:    BLK.W    $180,0
  325. COLL3:    BLK.W    $180,0
  326.  
  327. INV:    BLK.W    68,0
  328. DEV:    BLK.W    64,0
  329.  
  330.  
  331.  
  332. SINUS:
  333.     dc.L    $32333436,$3738393B,$3C3D3E3F,$41424344,$45464748,$4A4B4C4D
  334.     dc.L    $4E4F5051,$52535454,$55565758,$59595A5B,$5C5C5D5E,$5E5F5F60
  335.     dc.L    $60616161,$62626363,$63636364,$64646464,$64646464,$64646363
  336.     dc.L    $63636362,$62616161,$60605F5F,$5E5E5D5C,$5C5B5A59,$59585756
  337.     dc.L    $55545453,$5251504F,$4E4D4C4B,$4A484746,$45444342,$413F3E3D
  338.     dc.L    $3C3B3938,$37363433,$3231302E,$2D2C2B29,$28272625,$23222120
  339.     dc.L    $1F1E1D1C,$1A191817,$16151413,$12111010,$0F0E0D0C,$0B0B0A09
  340.     dc.L    $08080706,$06050504,$04030303,$02020101,$01010100,$00000000
  341.     dc.L    $00000000,$00000101,$01010102,$02030303,$04040505,$06060708
  342.     dc.L    $08090A0B,$0B0C0D0E,$0F101011,$12131415,$16171819,$1A1C1D1E
  343.     dc.L    $1F202122,$23252627,$28292B2C,$2D2E3031,$32333436,$3738393B
  344.     dc.L    $3C3D3E3F,$41424344,$45464748,$4A4B4C4D,$4E4F5051,$52535454
  345.     dc.L    $55565758,$59595A5B,$5C5C5D5E,$5E5F5F60,$60616161,$62626363
  346.     dc.L    $63636364,$64646464,$64646464,$64646363,$63636362,$62616161
  347.     dc.L    $60605F5F,$5E5E5D5C,$5C5B5A59,$59585756,$55545453,$5251504F
  348.     dc.L    $4E4D4C4B,$4A484746,$45444342,$413F3E3D,$3C3B3938,$37363433
  349.     dc.L    $3231302E,$2D2C2B29,$28272625,$23222120,$1F1E1D1C,$1A191817
  350.     dc.L    $16151413,$12111010,$0F0E0D0C,$0B0B0A09,$08080706,$06050504
  351.     dc.L    $04030303,$02020101,$01010100,$00000000,$00000000,$00000101
  352.     dc.L    $01010102,$02030303,$04040505,$06060708,$08090A0B,$0B0C0D0E
  353.     dc.L    $0F101011,$12131415,$16171819,$1A1C1D1E,$1F202122,$23252627
  354.     dc.L    $28292B2C,$2D2E3031,$32333436,$3738393B,$3C3D3E3F,$41424344
  355.     dc.L    $45464748,$4A4B4C4D,$4E4F5051,$52535454,$55565758,$59595A5B
  356.     dc.L    $5C5C5D5E,$5E5F5F60,$60616161,$62626363,$63636364,$64646464
  357.     dc.L    $64646464,$64646363,$63636362,$62616161,$60605F5F,$5E5E5D5C
  358.     dc.L    $5C5B5A59,$59585756,$55545453,$5251504F,$4E4D4C4B,$4A484746
  359.     dc.L    $45444342,$413F3E3D,$3C3B3938,$37363433,$3231302E,$2D2C2B29
  360.     dc.L    $28272625,$23222120,$1F1E1D1C,$1A191817,$16151413,$12111010
  361.     dc.L    $0F0E0D0C,$0B0B0A09,$08080706,$06050504,$04030303,$02020101
  362.     dc.L    $01010100,$00000000,$00000000,$00000101,$01010102,$02030303
  363.     dc.L    $04040505,$06060708,$08090A0B,$0B0C0D0E,$0F101011,$12131415
  364.     dc.L    $16171819,$1A1C1D1E,$1F202122,$23252627,$28292B2C,$2D2E3031
  365.     dc.L    $32333436,$3738393B,$3C3D3E3F,$41424344,$45464748,$4A4B4C4D
  366.     dc.L    $4E4F5051,$52535454,$55565758,$59595A5B,$5C5C5D5E,$5E5F5F60
  367.     dc.L    $60616161,$62626363,$63636364,$64646464,$64646464,$64646363
  368.     dc.L    $63636362,$62616161,$60605F5F,$5E5E5D5C,$5C5B5A59,$59585756
  369.     dc.L    $55545453,$5251504F,$4E4D4C4B,$4A484746,$45444342,$413F3E3D
  370.     dc.L    $3C3B3938,$37363433,$3231302E,$2D2C2B29,$28272625,$23222120
  371.     dc.L    $1F1E1D1C,$1A191817,$16151413,$12111010,$0F0E0D0C,$0B0B0A09
  372.     dc.L    $08080706,$06050504,$04030303,$02020101,$01010100,$00000000
  373.     dc.L    $00000000,$00000101,$01010102,$02030303,$04040505,$06060708
  374.     dc.L    $08090A0B,$0B0C0D0E,$0F101011,$12131415,$16171819,$1A1C1D1E
  375.     dc.L    $1F202122,$23252627,$28292B2C,$2D2E3031
  376.  
  377. COP:        dc.W $008E,$3681,$0090,$FFC1,$0092,$0038,$0094,$00D0
  378.         dc.W $0100,$0200
  379.         dc.W $0180,$0000,$0102,$0000,$0108,$0000
  380.         dc.W $0104,$0000
  381. PL0:        dc.W $00E0,$0006,$00E2,$0000,$00E4,$0006,$00E6,$0028
  382.         dc.W $00E8,$0006,$00EA,$0050,$00EC,$0006,$00EE,$0078
  383.         dc.W $0108,$0078,$010A,$0078
  384.         dc.W $4701,$FFFE
  385.         dc.W $0100,$4200
  386. PLASMACOP:
  387.     BLK.W    6120,0
  388.  
  389.         dc.W $FF19,$FFFE,$0100,$0200
  390.         dc.W $0180,$0000
  391.         dc.W $FFFF,$FFFE
  392.  
  393. COPSEC:        dc.W $008E,$3681,$0090,$FFC1,$0092,$0038,$0094,$00D0
  394.         dc.W $0100,$0200
  395.         dc.W $0180,$0000,$0102,$0000,$0108,$0000
  396.         dc.W $0104,$0000
  397. PL1:        dc.W $00E0,$0006,$00E2,$0000,$00E4,$0006,$00E6,$0028
  398.         dc.W $00E8,$0006,$00EA,$0050,$00EC,$0006,$00EE,$0078
  399.         dc.W $0108,$0078,$010A,$0078
  400.         dc.W $4701,$FFFE
  401.         dc.W $0100,$4200
  402. PLASMACOP2:
  403.     BLK.W    6120,0
  404.  
  405.         dc.W $FF19,$FFFE,$0100,$0200
  406.         dc.W $0180,$0000
  407.         dc.W $FFFF,$FFFE
  408.  
  409. FLAG:        dc.W    0
  410. COUNTER:        dc.W    3
  411. FF:
  412.     SUB.W    #1,COUNTER
  413.     BNE    RAUS
  414.     MOVE.W    #3,COUNTER
  415.  
  416.     LEA    PL1,A0
  417.     LEA    PL0,A1
  418.  
  419.     BTST    #0,FLAG
  420.     BEQ    SUBI
  421.     CMP.W     #$A0*70,6(A0)
  422.     BNE    GOGO2
  423.     BCHG    #0,FLAG
  424.     RTS
  425. GOGO2:
  426.     ADD.W    #$A0,6(A0)
  427.     ADD.W    #$A0,14(A0)
  428.     ADD.W    #$A0,22(A0)
  429.     ADD.W    #$A0,30(A0)
  430.  
  431.     ADD.W    #$A0,6(A1)
  432.     ADD.W    #$A0,14(A1)
  433.     ADD.W    #$A0,22(A1)
  434.     ADD.W    #$A0,30(A1)
  435. RAUS:
  436.     RTS
  437.  
  438. SUBI:
  439.     CMP.W     #0,6(A0)
  440.     BNE    GOGO
  441.     BCHG    #0,FLAG
  442.     RTS
  443. GOGO:
  444.     SUB.W    #$A0,6(A0)
  445.     SUB.W    #$A0,14(A0)
  446.     SUB.W    #$A0,22(A0)
  447.     SUB.W    #$A0,30(A0)
  448.  
  449.     SUB.W    #$A0,6(A1)
  450.     SUB.W    #$A0,14(A1)
  451.     SUB.W    #$A0,22(A1)
  452.     SUB.W    #$A0,30(A1)
  453.     RTS
  454.